home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Pinup 2.1.0 / src / Pinup2.c < prev   
C/C++ Source or Header  |  1996-07-07  |  8KB  |  344 lines

  1. /* ----------------------------------------------------------------------
  2.  
  3.     Pinup
  4.     version 2.1.0
  5.     
  6.     This application basically shows a PICT of ID 128 in a windoid. It
  7.     also remembers the last position of the picture.
  8.  
  9.     Written by: Darrell Anderson
  10.     Updated for CW9 by: Paul Celestin
  11.  
  12.     950630 - 2.0.0 - first CW version
  13.     960707 - 2.1.0 - updated for CW9
  14.  
  15. ---------------------------------------------------------------------- */
  16.  
  17. #include "errorDLOG.h"
  18.  
  19. #define kBaseResID            128
  20. #define kMoveToFront        (WindowPtr)-1L
  21.  
  22. #define mApple                kBaseResID
  23. #define iAbout                1
  24.  
  25. #define mFile                kBaseResID+1
  26. #define iQuit                1
  27.  
  28. #define k_PICT_ID            128
  29. #define k_WIND_ID            128
  30.  
  31. #define MAXLONG                32768
  32.  
  33. /*************************************************//* GLOBALS */
  34.  
  35. Boolean        gDone;
  36. CWindowPtr    gWindow;
  37. PicHandle    gPicture;
  38. Handle        gCoordsRectH;
  39.  
  40. /*************************************************//* FUNCTION HEADERS */
  41.  
  42. void        ToolBoxInit( void );
  43. void        WindowInit( void );
  44. void        MenuBarInit( void );
  45. void        EventLoop( void );
  46. void        DoEvent( EventRecord *eventPtr );
  47. void        HandleMouseDown( EventRecord *eventPtr );
  48. void        HandleMenuChoice( long menuChoice );
  49. void        HandleAppleChoice( short item );
  50. void        HandleFileChoice( short item );
  51. void        DoUpdate( EventRecord *eventPtr );
  52. void         DoPicture( WindowPtr window, PicHandle picture );
  53. void         DoUpdate( EventRecord *eventPtr );
  54. void        DoAboutSelected( void );
  55. void        AtQuit( void );
  56.  
  57. /*************************************************//* main */
  58. void main( void )
  59. {
  60.     ToolBoxInit();
  61.     WindowInit();
  62.     MenuBarInit();
  63.     
  64.     EventLoop();
  65.     
  66.     AtQuit();
  67. }
  68.  
  69. /*************************************************//* ToolBoxInit */
  70. void ToolBoxInit( void )
  71. {
  72.     InitGraf( &qd.thePort );
  73.     InitFonts();
  74.     InitWindows();
  75.     InitMenus();
  76.     TEInit();
  77.     InitDialogs( nil );
  78.     InitCursor();
  79. }
  80.  
  81. /*************************************************//* WindowInit */
  82. void WindowInit( void )
  83. {
  84.     Rect            windRect;
  85.     short            *shortPtr;
  86.     
  87.     // get the picture!
  88.     gPicture = GetPicture( k_PICT_ID );
  89.     if( gPicture == nil )
  90.         ErrorDLOG( "Can't load PICT 128! Make sure it's there and/or increase my memory allocation", true );
  91.  
  92.     HNoPurge( (Handle)gPicture );
  93.  
  94.     // get the window, size for pict!
  95.     gWindow = (CWindowPtr)GetNewCWindow( k_WIND_ID, nil, kMoveToFront );
  96.     
  97.     if( gWindow == nil )
  98.         ErrorDLOG( "Couldn't open window, try increasing my memory allocation.", true );
  99.  
  100.     windRect = (**(gPicture)).picFrame;        
  101.     SizeWindow( (WindowPtr)gWindow, (windRect.right - windRect.left), (windRect.bottom - windRect.top),
  102.             false );
  103.             
  104.     // move to last known location!
  105.     gCoordsRectH = GetResource( 'data', 128 );
  106.     HLock( gCoordsRectH );
  107.     if( gCoordsRectH == nil )
  108.         ErrorDLOG( "Can't load coordinates!  Sorry!", true );
  109.         
  110.     shortPtr = (short *) (*gCoordsRectH);
  111.     MoveWindow( (WindowPtr)gWindow, *shortPtr, *(shortPtr+1), false );
  112.     
  113.     HUnlock( gCoordsRectH );
  114.         
  115.     // set the picture to the window so the system will deal with redrawing it!
  116. //    SetWindowPic( gWindow, gPicture );
  117.                                     
  118.     // at this point, gWindow and gPicture are valid.        
  119.     ShowWindow( (WindowPtr)gWindow );
  120. }
  121.  
  122. /*************************************************//* MenuBarInit */
  123. void MenuBarInit( void )
  124. {
  125.     Handle            menuBar;
  126.     MenuHandle        menu;
  127.     ControlHandle    control;
  128.     OSErr            myErr;
  129.     long            feature;
  130.     
  131.     menuBar = GetNewMBar( kBaseResID );
  132.     SetMenuBar( menuBar );
  133.     
  134.     menu = GetMHandle( mApple );
  135.     AddResMenu( menu, 'DRVR' );
  136.     
  137.     DrawMenuBar();
  138. }
  139.  
  140. /*************************************************//* EventLoop */
  141. void EventLoop( void )
  142. {
  143.     EventRecord        event;
  144.     
  145.     gDone = false;
  146.     
  147.     while( gDone == false )
  148.     {
  149.         if( WaitNextEvent( everyEvent, &event, MAXLONG, nil ))
  150.             DoEvent( &event );
  151.     }
  152. }
  153.  
  154. /*************************************************//* DoEvent */
  155. void DoEvent( EventRecord *eventPtr )
  156. {
  157.     char        theChar;
  158.     
  159.     switch( eventPtr->what )
  160.     {
  161.         case mouseDown:
  162.             HandleMouseDown( eventPtr );
  163.             break;
  164.         case keyDown:
  165.         case autoKey:
  166.             theChar = eventPtr->message & charCodeMask;
  167.             if( (eventPtr->modifiers & cmdKey) != 0 )
  168.                 HandleMenuChoice( MenuKey( theChar ) );
  169.             break;
  170.         case updateEvt:
  171.             DoUpdate( eventPtr );
  172.             break;
  173.     }
  174. }
  175.  
  176. /*************************************************//* HandleMouseDown */
  177. void HandleMouseDown( EventRecord *eventPtr )
  178. {
  179.     WindowPtr        whichWindow;
  180.     short            thePart;
  181.     long            menuChoice;
  182.     
  183.     thePart = FindWindow( eventPtr->where, &whichWindow );
  184.     switch( thePart )
  185.     {
  186.         case inMenuBar:
  187.             menuChoice = MenuSelect( eventPtr->where );
  188.             HandleMenuChoice( menuChoice );
  189.             break;
  190.         case inSysWindow:
  191.             SystemClick( eventPtr, whichWindow );
  192.             break;
  193.         case inDrag:
  194.             DragWindow( whichWindow, eventPtr->where, &qd.screenBits.bounds );
  195.             break;
  196.         case inGoAway:
  197.             if( TrackGoAway( whichWindow, eventPtr->where ))
  198.                 gDone = true;
  199.             break;
  200.         case inContent:
  201.             DragWindow( whichWindow, eventPtr->where, &qd.screenBits.bounds );
  202.             break;
  203.     }
  204. }
  205.  
  206. /*************************************************//* HandleMenuChoice */
  207. void HandleMenuChoice( long menuChoice )
  208. {
  209.     short         menu;    
  210.     short        item;
  211.     
  212.     if( menuChoice != 0 )
  213.     {
  214.         menu = HiWord( menuChoice );
  215.         item = LoWord( menuChoice );
  216.         
  217.         switch( menu )
  218.         {
  219.             case mApple:
  220.                 HandleAppleChoice( item );
  221.                 break;
  222.             case mFile:
  223.                 HandleFileChoice( item );
  224.                 break;
  225.         }
  226.         HiliteMenu( 0 );
  227.     }
  228. }
  229.  
  230. /*************************************************//* HandleAppleChoice */
  231. void HandleAppleChoice( short item )
  232. {
  233.     MenuHandle        appleMenu;
  234.     Str255            accName;
  235.     short            accNumber;
  236.     
  237.     switch( item )
  238.     {
  239.         case iAbout:
  240.             DoAboutSelected();
  241.             break;
  242.         default:
  243.             appleMenu = GetMHandle( mApple );
  244.             GetItem( appleMenu, item, accName );
  245.             accNumber = OpenDeskAcc( accName );
  246.             break;
  247.     }
  248. }
  249.  
  250. /*************************************************//* HandleFileChoice */
  251. void HandleFileChoice( short item )
  252. {
  253.     switch( item )
  254.     {
  255.         case iQuit:
  256.             gDone = true;
  257.             break;
  258.     }
  259. }
  260.  
  261. /*************************************************//* DoUpdate */
  262. void DoUpdate( EventRecord *eventPtr )
  263. {
  264.     PicHandle    picture;
  265.     WindowPtr    window;
  266.     
  267.     window = (WindowPtr)eventPtr->message;
  268.     
  269.     BeginUpdate( window );
  270.     
  271.     DoPicture( window, gPicture );
  272.     EndUpdate( window );
  273. }
  274.  
  275. /*************************************************//* DoPicture */
  276. void DoPicture( WindowPtr window, PicHandle picture )
  277. {
  278.     Rect            windowRect;
  279.     GrafPtr            oldPort;
  280. //    RgnHandle        tempRgn;
  281.     
  282.     GetPort( &oldPort );
  283.     SetPort( window );
  284.     
  285. //    tempRgn = NewRgn();
  286. //    GetClip( tempRgn );
  287.     EraseRect( &window->portRect );
  288. //    DrawGrowIcon( window );
  289.     
  290. //    windowRect = window->portRect;
  291. //    ClipRect( &window->portRect );
  292.     HLock( (Handle)picture );
  293.     DrawPicture( picture, &window->portRect );
  294.     HUnlock( (Handle)picture );
  295.     
  296. //    SetClip( tempRgn );
  297. //    DisposeRgn( tempRgn );
  298.     SetPort( oldPort );
  299. }
  300.  
  301. /*************************************************//* DoAboutSelected */
  302. void DoAboutSelected( void )
  303. {
  304.     GrafPtr            oldPort;
  305.     
  306.     GetPort( &oldPort );
  307.  
  308.     // about stuff here!
  309.     ErrorDLOG( "(Just kidding!) Ool for Elaine, by DA", false );
  310.         
  311.     SetPort( oldPort );
  312. }
  313.  
  314. void AtQuit( void )
  315. {
  316.     Point    refPoint;
  317.     short     *shortPtr;
  318.     GrafPtr            oldPort;
  319.     
  320.     GetPort( &oldPort );
  321.     
  322.     // store the window's current coordinates!
  323.     
  324.     // get global coords!
  325.     SetPort( (GrafPtr)gWindow );
  326.     refPoint.h = gWindow->portRect.left;
  327.     refPoint.v = gWindow->portRect.top;
  328.     LocalToGlobal( &refPoint );
  329.     
  330.     // store them in our string!
  331.     
  332.     HLock( gCoordsRectH );
  333.     shortPtr = (short *)(*gCoordsRectH);
  334.     
  335.     *shortPtr = refPoint.h;
  336.     *(shortPtr+1) = refPoint.v;
  337.     
  338.     ChangedResource( gCoordsRectH );
  339.     WriteResource( gCoordsRectH );
  340.     HUnlock( gCoordsRectH );
  341.     
  342.     SetPort( oldPort );
  343.     DisposeWindow( (WindowPtr)gWindow );
  344. }